package com.xq.apis;

import com.xq.vo.JsonVO;
import org.springframework.http.ResponseEntity;
import springfox.documentation.spring.web.json.Json;

import javax.servlet.http.HttpServletRequest;

/**
 * 用户登录和注册的aqi接口
 */
public interface AuthApis {

    JsonVO<String> send(String phone);

    /**
     * 用户注册
     * @param password
     * @return
     */
    ResponseEntity<JsonVO<Object>> register(String phone, String password);

    /**
     * 用户验证码登录
     * @param phone
     * @param code
     * @return
     */
    ResponseEntity<JsonVO<Object>> loginByCode(String phone, String code);

    /**
     * 用户使用密码登录
     * @param username
     * @param password
     * @return
     */
    ResponseEntity<JsonVO<Object>> loginByUsername(String username,String password);

    /**
     * 为注册后的用户设置用户名和密码
     */
    JsonVO<String> setUsernameAndPassword(String username,String password,String phone);

    /**
     * 找回密码 找回密码后要重新进行登录
     * 意思是要把token过期？
     * 找回逻辑是：输入手机号得到验证码 验证成功后，重新设置密码
     */
    JsonVO<String> findPasswordByPhone(String phone,String code,String newPassword);

    /**
     * 重新设置密码
     * 需要输入原本的密码，验证正确后才可以重新设置密码
     * 逻辑：输入原先的密码，如果密码正确则可以重新设置密码
     */
    JsonVO<String> reagainSetPassword(String oldPassword,String newPassword,HttpServletRequest request);

    /**
     * 重新设置用户名
     * 在登录的情况下可以直接修改
     */
     JsonVO<String> reagainSetUsername(String newUsername, HttpServletRequest request);

    /**
     * 登出账号的功能
     * 登出的原理是情况springSecurity中的认证信息，并将token加入黑名单，下次重新再次登录
     */
    JsonVO<String> logOut(HttpServletRequest request);

}
